package com.briup.es.domain.dto;

import com.briup.es.validate.Add;
import com.briup.es.validate.Update;
import jakarta.validation.constraints.*;
import lombok.Data;

import java.io.Serializable;
import java.time.LocalDate;

/**
 * 用于接收用户注册时传输参数的DTO实体
 */
@Data
public class UserDTO implements Serializable {
    // 在参数校验时，可以给指定的参数进行分组校验
    @NotNull(message = "id不能为空",groups = Update.class)
    @Null(message = "注册时id必须为null",groups = Add.class)
    private Integer id;
    @NotBlank(message = "注册时用户名不能为空")
    // 通过正则表达式的方式规范用户名
    @Pattern(regexp = "^[A-z0-9_]{3,8}$",message = "用户名只能由3-8位的字母数字_组成")
    private String username;
    // 通过正则表达式的方式规范密码的内容
    @Pattern(regexp = "^[A-z0-9_]{5,10}$",message = "密码必须由5-10位的字母数字_组成",groups = Add.class)
    @Null(message = "修改基础数据时，密码无需传输",groups = Update.class)
    private String password;
    private String gender;
    private String phone;
    @PastOrPresent(message = "生日不能晚于当前日期")
    private LocalDate birthday;
    private String avatar;
}
